int margin_right;
int margin_top;
int margin_bottom;
+ gboolean margin_dirty;
int initial_fullscreen_monitor;
cairo_region_t *opaque_region;
+ gboolean opaque_region_dirty;
+
cairo_region_t *input_region;
+ gboolean input_region_dirty;
+
cairo_region_t *staged_updates_region;
int saved_width;
static void gdk_window_request_transient_parent_commit (GdkWindow *window);
+static void gdk_wayland_window_sync_margin (GdkWindow *window);
+static void gdk_wayland_window_sync_input_region (GdkWindow *window);
+static void gdk_wayland_window_sync_opaque_region (GdkWindow *window);
+
GType _gdk_window_impl_wayland_get_type (void);
G_DEFINE_TYPE (GdkWindowImplWayland, _gdk_window_impl_wayland, GDK_TYPE_WINDOW_IMPL)
if (impl->pending_buffer_attached)
read_back_cairo_surface (window);
+ gdk_wayland_window_sync_margin (window);
+ gdk_wayland_window_sync_opaque_region (window);
+ gdk_wayland_window_sync_input_region (window);
+
/* From this commit forward, we can't write to the buffer,
* it's "live". In the future, if we need to stage more changes
* we have to allocate a new staging buffer and draw to it instead.
if (!impl->display_server.wl_surface)
return;
+ if (!impl->opaque_region_dirty)
+ return;
+
if (impl->opaque_region != NULL)
wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)),
impl->opaque_region);
if (wl_region != NULL)
wl_region_destroy (wl_region);
+
+ impl->opaque_region_dirty = FALSE;
}
static void
if (!impl->display_server.wl_surface)
return;
+ if (!impl->input_region_dirty)
+ return;
+
if (impl->input_region != NULL)
wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)),
impl->input_region);
if (wl_region != NULL)
wl_region_destroy (wl_region);
+
+ impl->input_region_dirty = FALSE;
}
static void
impl->display_server.wl_surface = wl_compositor_create_surface (display_wayland->compositor);
wl_surface_add_listener (impl->display_server.wl_surface, &surface_listener, window);
-
- gdk_wayland_window_sync_opaque_region (window);
- gdk_wayland_window_sync_input_region (window);
}
static void
(new_state & GDK_WINDOW_STATE_TILED) ? " tiled" : ""));
_gdk_set_window_state (window, new_state);
- gdk_wayland_window_sync_margin (window);
xdg_surface_ack_configure (xdg_surface, serial);
if (impl->hint != GDK_WINDOW_TYPE_HINT_DIALOG &&
new_state & GDK_WINDOW_STATE_FOCUSED)
gdk_wayland_window_sync_parent (window, NULL);
gdk_wayland_window_sync_title (window);
- gdk_wayland_window_sync_margin (window);
if (window->state & GDK_WINDOW_STATE_MAXIMIZED)
xdg_surface_set_maximized (impl->display_server.xdg_surface);
cairo_region_translate (impl->input_region, offset_x, offset_y);
}
- gdk_wayland_window_sync_input_region (window);
+ impl->input_region_dirty = TRUE;
}
static void
g_clear_pointer (&impl->opaque_region, cairo_region_destroy);
impl->opaque_region = cairo_region_reference (region);
- gdk_wayland_window_sync_opaque_region (window);
+ impl->opaque_region_dirty = TRUE;
}
static void
impl->margin_right = right;
impl->margin_top = top;
impl->margin_bottom = bottom;
- gdk_wayland_window_sync_margin (window);
}
static gboolean